package org.ham007.proxysender.server.twitter;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.logging.Level;
import java.util.logging.Logger;

import twitter4j.Twitter;

/**
 * Twitterオブジェクト取得</br>
 * </br>

 * @author 223
 *
 */
public class MyTwitter {
	
	private static Twitter twitter = null;
	private static final String CONSUMER_TOKEN_FILE = "WEB-INF//consumer.token";
	private static final String ACCSESS_TOKEN_FILE = "WEB-INF//accsess.token";
	private static final Logger logger = Logger.getLogger(MyTwitter.class.getName());
	
	/**
	 * Twitterオブジェクト取得</br>
	 * </br>
	 * 失敗時はnullを返す</br>
	 * @return
	 */
	public static Twitter get()
	{
		/*
		 * トークン値セット処理について
		 * 
		 * [開発時]
		 * ローカルファイル認証設定を行う。
		 * *.tokenのフォーマットは下記の通りとする。
		 * TOKEN:"トークン値",SECRET:"シークレット値"
		 * 
		 * [実環境]
		 * デプロイ先での動作はDataStoreから読み出す。
		 * あらかじめKindが定義され、Entityが追加されていることが前提。
		 *    -> このあたりをなんとかしたい。
		 */
		
		if(twitter != null)
		{
			logger.log(Level.INFO, "twitter is not null.");
			return twitter;
		}
		
		twitter = new Twitter();
		twitter.setUserId("ProxySender");
		
		File c_token_file = new File(CONSUMER_TOKEN_FILE);
		File a_token_file = new File(ACCSESS_TOKEN_FILE);

		String current_dir = new File(".").getAbsolutePath();
		logger.log(Level.INFO, "current dir : " + current_dir);
		logger.log(Level.INFO, "token dir : " + c_token_file.getAbsolutePath());
		
		if(c_token_file.exists() == true)
		{
			logger.log(Level.INFO, "[MYTwitter]  token found.");
			
			//ローカルファイルで認証
			String[] c_token = getLocalTokenInfo(c_token_file);
			String[] a_token = getLocalTokenInfo(a_token_file);
			if(c_token == null || a_token == null)
			{
				logger.log(Level.INFO, "[MYTwitter]  token string not found.");
				twitter = null;
			}
			else
			{
				logger.log(Level.INFO, "[MYTwitter]  token string found.");
				twitter.setOAuthConsumer(c_token[0], c_token[1]);
				twitter.setOAuthAccessToken(a_token[0], a_token[1]);
			}
		}
		else
		{
			logger.log(Level.INFO, "[MYTwitter]  token not found.");
		}
		
//		else
//		{
//			//DataStoreからロード
//			PersistenceManager mng = PMF.get().getPersistenceManager();
//			try
//			{
//				TokenTable c_token = mng.getObjectById(TokenTable.class, "consumer_token");
//				TokenTable a_token = (TokenTable)mng.getObjectById(TokenTable.class, "access_token");
//				twitter.setOAuthConsumer(c_token.getTokenKey(), c_token.getTokenSecret());
//				twitter.setOAuthAccessToken(a_token.getTokenKey(), a_token.getTokenSecret());
//			}
//			catch(Exception e)
//			{
//				e.printStackTrace(System.err);
//				twitter = null;
//			}
//			finally
//			{
//				mng.close();
//			}
//		}
		
		return twitter;
	}
	
	private static String[] getLocalTokenInfo(File file)
	{		
		BufferedReader br = null;
		String[] token = null;
		
		try
		{
			br = new BufferedReader(new FileReader(file));
			String data = br.readLine();
			br.close();
			
			token = new String[]{
							data.split(",")[0].split(":")[1].replaceAll("\"", "")
							,data.split(",")[1].split(":")[1].replaceAll("\"", "")
						};
		}
		catch(Exception e)
		{
			e.printStackTrace(System.err);
		}
		
		return token;
	}
}
